package view;

import java.awt.*;
import java.util.*;
import java.util.List;

import javax.swing.*;
import javax.swing.LayoutStyle.*;
import javax.swing.GroupLayout.*;

import model.*;
import controller.*;


import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class AlquilerAlta extends JPanel {
	private static final long serialVersionUID = 1L;
	private JComboBox<String> alquilerListaPeliculasBox;
	private JComboBox<String> alquilerListaJuegosBox;
	private Hashtable<String,Juego>juegosBase=new Hashtable<String,Juego>();
	private JComboBox<String> alquilerListaUsuarios = new JComboBox<String>();
	private Hashtable<String,JuegoCopia>juegosCopiaTabla=new Hashtable<String,JuegoCopia>();
	@SuppressWarnings("unused")
	private Hashtable<String,Pelicula>peliculasBase=new Hashtable<String,Pelicula>();
	private Hashtable<String,Persona>usuariosTabla=new Hashtable<String,Persona>();
	private JButton btnEliminarJuego;
	private JLabel alquilerAltaUsuarioNomApe = new JLabel("");

	/**
	 * Create the panel.
	 */
	public AlquilerAlta() {
		setSize(new Dimension(800, 400));

		JLabel alquilerAltaTit = new JLabel("Cargar Alquiler");
		alquilerAltaTit.setAlignmentX(Component.CENTER_ALIGNMENT);
		alquilerAltaTit.setHorizontalAlignment(SwingConstants.CENTER);
		alquilerAltaTit.setHorizontalTextPosition(SwingConstants.CENTER);
		alquilerAltaTit.setFont(new Font("Tahoma", Font.BOLD, 15));

		JLabel alquilerAltaNombre = new JLabel("Usuario:");
		alquilerAltaNombre.setHorizontalAlignment(SwingConstants.RIGHT);

		JLabel alquilerAltaCat = new JLabel("Fecha de devoluci\u00F3n estimada:");
		alquilerAltaCat.setHorizontalAlignment(SwingConstants.RIGHT);

		JLabel alquilerAltaPlat = new JLabel("Lista de juegos a alquilar:");
		alquilerAltaPlat.setHorizontalAlignment(SwingConstants.RIGHT);
		alquilerListaJuegosBox = new JComboBox<String>();
		alquilerListaJuegosBox.setVisible(false);

		JLabel alquilerAltaTipoAlq = new JLabel("Lista de pel\u00EDculas a alquilar:");
		alquilerAltaTipoAlq.setHorizontalAlignment(SwingConstants.RIGHT);
		alquilerListaPeliculasBox = new JComboBox<String>();
		
		JLabel alquilerAltaFechaEstrenoLbl = new JLabel("Fecha de pr\u00E9stamo:");
		alquilerAltaFechaEstrenoLbl.setHorizontalAlignment(SwingConstants.RIGHT);
		
		JButton alquilerAltaBtn = new JButton("Cargar");
		alquilerAltaBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				/*
				Alquiler alquiler=new Alquiler(
						null,
						v_text.getText(),
						fechaEstreno,
						cat,
						alqTipo,
						plat
					);
				AlquilerController.guardar(alquiler);*/
			}
		});
		
		JButton btnAgregarJuego = new JButton("Agregar Juego");
		btnAgregarJuego.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					//ComboBox de Juegos
					final JComboBox<String> alquilerListaJuegos = new JComboBox<String>();
					List<Juego>juegos=JuegoController.getJuegoController().listar();
					juegosBase=new Hashtable<String,Juego>();
					for(Juego juego : juegos){
						alquilerListaJuegos.addItem(juego.getNombre()+" - "+juego.getPlataforma().getNombre());
						juegosBase.put(juego.getNombre()+" - "+juego.getPlataforma().getNombre(), juego);
					}
						//ComboBox de Copias
						final JComboBox<String> alquilerListaJuegosCopia = new JComboBox<String>();
						List<JuegoCopia>juegosCopia=JuegoController.getJuegoController().listar(juegos.get(0));
						for(JuegoCopia juegoCopia : juegosCopia){
							alquilerListaJuegosCopia.addItem(juegoCopia.getJuego().getNombre()+" - "+juegoCopia.getJuego().getPlataforma().getNombre()+" - ID="+juegoCopia.getId());
							juegosCopiaTabla.put(juegoCopia.getJuego().getNombre()+" - "+juegoCopia.getJuego().getPlataforma().getNombre()+" - ID="+juegoCopia.getId(), juegoCopia);
						}
					alquilerListaJuegos.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent e) {
							Juego juego=juegosBase.get(alquilerListaJuegos.getSelectedItem());
							List<JuegoCopia>juegosCopia=JuegoController.getJuegoController().listar(juego);
							for(JuegoCopia juegoCopia : juegosCopia){
								alquilerListaJuegosCopia.addItem(juegoCopia.getJuego().getNombre()+" - "+juegoCopia.getJuego().getPlataforma().getNombre()+" - ID="+juegoCopia.getId());
								juegosCopiaTabla.put(juegoCopia.getJuego().getNombre()+" - "+juegoCopia.getJuego().getPlataforma().getNombre()+" - ID="+juegoCopia.getId(), juegoCopia);
							}
						}
					});
					JButton agregar = new JButton("Agregar");
					agregar.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent e) {
							alquilerListaJuegosBox.addItem((String)alquilerListaJuegos.getSelectedItem());
							alquilerListaJuegosBox.setVisible(true);
							btnEliminarJuego.setVisible(true);
						}
					});
					final JComponent[] inputs = new JComponent[] {
							new JLabel("Lista de Juegos"),
							alquilerListaJuegos,
							alquilerListaJuegosCopia,
							agregar
					};
					JOptionPane.showMessageDialog(null, inputs, "Lista de juegos", JOptionPane.PLAIN_MESSAGE);
			}
		});
		
		JButton btnAgregarPelcula = new JButton("Agregar Pel\u00EDcula");

		int dia = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
		int mes=Calendar.getInstance().get(Calendar.MONTH)+1;
		int anyo =Calendar.getInstance().get(Calendar.YEAR);
		JLabel alquilerFechaPrestamo = new JLabel(""+anyo+"-"+mes+"-"+dia);

		int diaPlazo = dia+3;
		int mesPlazo=mes;
		int anyoPlazo=anyo;
		if(Calendar.getInstance().get(Calendar.MONTH)==1){
			if(diaPlazo >28){
				diaPlazo=diaPlazo-28;
				mesPlazo++;
				if(mesPlazo>11){
					mesPlazo=mesPlazo-11;
					anyoPlazo++;
				}
			}
		}else{
			if(Calendar.getInstance().get(Calendar.MONTH)==0
					|| Calendar.getInstance().get(Calendar.MONTH)==2
					|| Calendar.getInstance().get(Calendar.MONTH)==4
					|| Calendar.getInstance().get(Calendar.MONTH)==6
					|| Calendar.getInstance().get(Calendar.MONTH)==7
					|| Calendar.getInstance().get(Calendar.MONTH)==9
					|| Calendar.getInstance().get(Calendar.MONTH)==11){
				if(diaPlazo >31){
					diaPlazo=diaPlazo-31;
					mesPlazo++;
					if(mesPlazo>11){
						mesPlazo=mesPlazo-11;
						anyoPlazo++;
					}
				}
			}else{
				if(diaPlazo >30){
					diaPlazo=diaPlazo-30;
					mesPlazo++;
					if(mesPlazo>11){
						mesPlazo=mesPlazo-11;
						anyoPlazo++;
					}
				}
			}
		}
		JLabel alquilerFechaDevEstimada = new JLabel(""+anyoPlazo+"-"+mesPlazo+"-"+diaPlazo);
		
		alquilerListaUsuarios.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				alquilerAltaUsuarioNomApe.setText(usuariosTabla.get(alquilerListaUsuarios.getSelectedItem()).getApellido()+", "+usuariosTabla.get(alquilerListaUsuarios.getSelectedItem()).getNombre()+".");
				if(ReservaController.getReservaController().buscarActiva(usuariosTabla.get(alquilerListaUsuarios.getSelectedItem()).getId()) != null){
					
				}
			}
		});
		List<Persona>usuarios=PersonaController.getPersonaController().listar();
		for(Persona user : usuarios){
			usuariosTabla.put(user.getUser(), user);
			alquilerListaUsuarios.addItem(user.getUser());
		}
		
		btnEliminarJuego = new JButton("Eliminar Juego");
		btnEliminarJuego.setVisible(false);
		btnEliminarJuego.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				alquilerListaJuegosBox.removeItem(alquilerListaJuegosBox.getSelectedItem());
				if(alquilerListaJuegosBox.getItemCount()==0){
					alquilerListaJuegosBox.setVisible(false);
					btnEliminarJuego.setVisible(false);
				}
		}
	});
		
		JButton btnEliminarPelcula = new JButton("Eliminar Pel\u00EDcula");
		
		GroupLayout groupLayout = new GroupLayout(this);
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.TRAILING)
				.addGroup(groupLayout.createSequentialGroup()
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addGroup(groupLayout.createSequentialGroup()
							.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
								.addComponent(alquilerAltaTipoAlq, GroupLayout.DEFAULT_SIZE, 281, Short.MAX_VALUE)
								.addComponent(alquilerAltaNombre, GroupLayout.DEFAULT_SIZE, 281, Short.MAX_VALUE)
								.addComponent(alquilerAltaFechaEstrenoLbl, GroupLayout.DEFAULT_SIZE, 281, Short.MAX_VALUE)
								.addComponent(alquilerAltaCat, GroupLayout.DEFAULT_SIZE, 281, Short.MAX_VALUE)
								.addComponent(alquilerAltaPlat, GroupLayout.DEFAULT_SIZE, 281, Short.MAX_VALUE))
							.addPreferredGap(ComponentPlacement.RELATED)
							.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
								.addGroup(groupLayout.createSequentialGroup()
									.addComponent(alquilerListaPeliculasBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
									.addPreferredGap(ComponentPlacement.RELATED)
									.addComponent(btnAgregarPelcula)
									.addPreferredGap(ComponentPlacement.RELATED)
									.addComponent(btnEliminarPelcula))
								.addGroup(groupLayout.createSequentialGroup()
									.addComponent(alquilerListaJuegosBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
									.addPreferredGap(ComponentPlacement.RELATED)
									.addComponent(btnAgregarJuego)
									.addPreferredGap(ComponentPlacement.RELATED)
									.addComponent(btnEliminarJuego))
								.addComponent(alquilerFechaPrestamo)
								.addComponent(alquilerFechaDevEstimada)
								.addGroup(groupLayout.createSequentialGroup()
									.addGap(202)
									.addComponent(alquilerAltaBtn))
								.addGroup(groupLayout.createSequentialGroup()
									.addComponent(alquilerListaUsuarios, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
									.addPreferredGap(ComponentPlacement.RELATED)
									.addComponent(alquilerAltaUsuarioNomApe)))
							.addPreferredGap(ComponentPlacement.RELATED, 247, Short.MAX_VALUE))
						.addGroup(groupLayout.createSequentialGroup()
							.addContainerGap()
							.addComponent(alquilerAltaTit, GroupLayout.DEFAULT_SIZE, 780, Short.MAX_VALUE)))
					.addContainerGap())
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addContainerGap()
					.addComponent(alquilerAltaTit, GroupLayout.PREFERRED_SIZE, 19, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.RELATED)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(alquilerAltaNombre)
						.addComponent(alquilerListaUsuarios, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(alquilerAltaUsuarioNomApe))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(alquilerAltaFechaEstrenoLbl)
						.addComponent(alquilerFechaPrestamo))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(alquilerAltaCat)
						.addComponent(alquilerFechaDevEstimada))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(alquilerListaJuegosBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(alquilerAltaPlat)
						.addComponent(btnAgregarJuego)
						.addComponent(btnEliminarJuego))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(alquilerListaPeliculasBox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addComponent(alquilerAltaTipoAlq)
						.addComponent(btnAgregarPelcula)
						.addComponent(btnEliminarPelcula))
					.addGap(28)
					.addComponent(alquilerAltaBtn)
					.addContainerGap(195, Short.MAX_VALUE))
		);
		setLayout(groupLayout);

	}
}
